#pragma once

#include <Windows.h>
#include "System.h"

LSH_NAMESPACE_BEGIN

class SystemWin : public System, public Singleton<SystemWin>{
    friend class Singleton<SystemWin>;
public:
	SystemWin();
	virtual( ~SystemWin() );
public:
	virtual bool Init(ProcessInfo* pProcessInfo);
	virtual bool Shutdown();
public:
	virtual ProcessInfo*     GetProcessInfo() { return _pProcessInfo; }
	virtual LogSystem*       GetLogSystem() { return _pLogSystem; }
	virtual ErrorSystem*     GetErrorSystem() { return _pErrorSystem; }
	virtual TimeSytem*       GetTimeSystem() { return _pTimeSystem; }
	virtual WindowSystem*    GetWindowSystem() { return _pWindowSystem; }
	virtual InputSystem*     GetInputSystem() { return _pInputSystem; }
	virtual AudioSystem*     GetAudioSystem() { return _pAudioSystem; }
	virtual NetworkSystem*   GetNetworkSystem() { return _pNetworkSystem; }
	virtual GraphSystem*     GetGraphSystem() { return _pGraphSystem; }
public:
	virtual FrameSystem*     GetFrameSystem() { return _pFrameSystem; }
	virtual TaskSystem*      GetTaskSystem() { return _pTaskSystem; }
	virtual ResourceSystem*  GetResourceSystem() { return _pResourceSystem; }
	virtual FactorySystem*   GetFactorySystem() { return _pFactorySystem; }
protected:
	ProcessInfo*	_pProcessInfo;
	LogSystem*		_pLogSystem;
	ErrorSystem*	_pErrorSystem;
	TimeSytem*		_pTimeSystem;
	WindowSystem*	_pWindowSystem;
	InputSystem*	_pInputSystem;
	AudioSystem*	_pAudioSystem;
	NetworkSystem*	_pNetworkSystem;
	GraphSystem*	_pGraphSystem;

	FrameSystem*	_pFrameSystem;
	TaskSystem*		_pTaskSystem;
	ResourceSystem* _pResourceSystem;
	FactorySystem*	_pFactorySystem;
};

LSH_NAMESPACE_END